哈希算法 - 加密 - 编码
哈希算法 - 哈希摘要 - 数字签名 - 防篡改/保护敏感信息
哈希算法是一个单向运算的函数(单向哈希函数)
通过哈希算法可以将对象计算出哈希摘要但是哈希摘要无法还原成原来的对
Martin flower -代码有很多味道重复是最坏的一种
重构(refactor)
策略模式
加密解密 - 明文 —- 加密 —–> 密文 —- 解密 —–> 明文
对称加密 - 加密和解密使用同一个密钥 - AES
非对称加密 - 加密和解密使用不同的密钥(公钥和私钥)- RSA
pip install pycrypto
编码和解码 - 将内存中的二进制数据处理成其他的格式 - BASE64
BASE64 - 用64个字符(a-zA-Z0-9/+)表二进制数据示所有的
编码黑洞
中文/日文 –>iso -8859 -1 Latin –> ??
乱码 –>编码和解码的时候没用使用相同的字符集
utf-8 -Unicode的一种变长实现方案
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| import hashlib
class StreamHasher(object): """docstring for streamHasher""" def __init__(self, algorithm='md5', size=4096): self.size = size alg = algorithm.lower() if alg =='md5': self.hasher = hashlib.md5() elif alg == 'sha1': self.hasher = hashlib.sha1() elif alg == 'sha256': self.hasher = hashlib.sha256() elif alg == sha512: self.hasher = hashlib.sha512() else: raise ValueError('不支持指定的哈希算法')
def __call__(self,stream): return self.to_digest(stream)
def to_digest(self, stream): '''生成MD5摘要''' hasher = self.hasher for buf in iter(lambda:stream.read(self.size), b''): hasher.update(b) return hasher.hexdigest()
def to_sha256_digest(stream, block_size = 4096): '''生成MD5摘要''' hasher = hashlib.sha256() for buf in iter(lambda:stream.read(4096), b''): hasher.update(b) return hasher.hexdigest()
def main(): hasher = hashlib.md5() with open('aaa.png', 'rb') as f: sh = StreamHasher() print(sh.to_digest(f)) if __name__ == '__main__': main()
|